package chenji.gunapi.task;

import java.util.HashSet;
import java.util.Set;

import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;

import chenji.gunapi.GunAPI;
import chenji.gunapi.Main;

public class GunTaskManager {
	private BukkitTask perTickTask;
	private Set<Taskable> perTickTaskables = new HashSet<Taskable>();
	private BukkitTask perSecondTask;
	private Set<Taskable> perSecondTaskables = new HashSet<Taskable>();

	public GunTaskManager() {
		this.perTickTask = new BukkitRunnable() {
			@Override
			public void run() {
				for (Taskable able : GunAPI.getGunAPI().getGunTaskManager().perTickTaskables) {
					able.task();
				}
			}
		}.runTaskTimer(Main.getPlugin(), 1, 1);

		this.perSecondTask = new BukkitRunnable() {

			@Override
			public void run() {
				for (Taskable able : GunAPI.getGunAPI().getGunTaskManager().perSecondTaskables) {
					able.task();
				}
			}
		}.runTaskTimer(Main.getPlugin(), 20, 20);
	}

	public void registerPerTickTask(Taskable t) {
		this.perTickTaskables.add(t);
	}

	public void unregisterPerTickTask(Taskable t) {
		this.perTickTaskables.remove(t);
	}

	public void registerPerSecondTask(Taskable t) {
		this.perSecondTaskables.add(t);
	}

	public void unregisterPerSecondTask(Taskable t) {
		this.perSecondTaskables.remove(t);
	}

	public void disable() {
		this.perSecondTask.cancel();
		this.perTickTask.cancel();
	}
}
